#include <vector>

#include <unordered_map> 
#include <iostream> 
 
int main() {
  std::unordered_map<int, int> foo; 
  
  foo.insert(std::make_pair(1, 2));

  return 0;
}

// Proven    node: pn = 0,   dn = inf
// Disproven node: pn = inf, dn = 0
// Unknown leaf node: pn = dn = 1
// Interior nodes: see below.

// Need a game model
//
// Print
// Number of moves available?
// Select a move?
// Move object for deltas in tree rather than board rep?
// Is a position terminal?
// Is a position a win?
// Is a position a loss?

// Transposition table
//
// Lookup proof & disproof numbers (and duals) for node
// Store  proof & disproof numbers (and duals) for node
// Node in table?

/*
struct OrNode {
  int ProofNumber() {
    return min_element(children.begin(), children.end())->ProofNumber();
  }

  int DisproofNumber() {
    int disproof_number = 0;
    for (int i = 0; i < children.size(); ++i) {
      disproof_number += children.DisproofNumber();
    }
    return disproof_number;
  }

  vector<AndNode> children;
};

struct AndNode {
  int ProofNumber() {
    int proof_number = 0;
    for (int i = 0; i < children.size(); ++i) {
      proof_number += children.ProofNumber();
    }
    return disproof_number;
  }

  int DisproofNumber() {
    return min_element(children.begin(), children.end())->DisproofNumber();
  }

  vector<OrNode> children;
};
*/
